package cn.lqz.bucttrain.redis;

import cn.lqz.bucttrain.pojo.dto.TokenUserInfoDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

/**
 * Redis业务类
 */
@Component
public class RedisService {
    @Resource
    private RedisUtils redisUtils;

    private String getTokenUserInfoDTOKey(String token){
        return RedisConstants.TOKEN_USER_INFO_DTO_KEY_PRIFIX+token;
    }

    /**
     * 存储TokenUserInfoDTO
     * @param token
     * @param tokenUserInfoDTO
     */
    public void saveTokenUserInfoDTO(String token, TokenUserInfoDTO tokenUserInfoDTO){
        // 过期时间为一天
        redisUtils.set(getTokenUserInfoDTOKey(token),tokenUserInfoDTO,60*60*24);
    }
    /**
     * 获取TokenUserInfoDTO
     * @param token
     */
    public TokenUserInfoDTO getTokenUserInfoDTO(String token){
        return (TokenUserInfoDTO) redisUtils.get(getTokenUserInfoDTOKey(token));
    }

    public void removeTokenUserInfoDTO(String token){
        redisUtils.del(getTokenUserInfoDTOKey(token));
    }

    /**
     * 获取站点城市列表
     * @return
     */
    public List<String> loadStationCityList(){
        List<Object> objectList = redisUtils.lGet(RedisConstants.STATION_CITY, 0, -1);
        return objectList.stream().map(String::valueOf).collect(Collectors.toList());
    }
    /**
     * 获取站点城名称列表
     * @return
     */
    public List<String> loadStationNameList(){
        List<Object> objectList = redisUtils.lGet(RedisConstants.STATION_NAME, 0, -1);
        return objectList.stream().map(String::valueOf).collect(Collectors.toList());
    }

    /**
     * 存储站点城市列表
     * @return
     */
    public void saveStationCityList(List<String> list){
        redisUtils.lSet(RedisConstants.STATION_CITY,list);
    }
    /**
     * 存储站点城市列表
     * @return
     */
    public void saveStationNameList(List<String> list){
        redisUtils.lSet(RedisConstants.STATION_NAME,list);
    }

    /**
     * 清除站点城市列表
     * @return
     */
    public void removeStationCityList(){
        redisUtils.del(RedisConstants.STATION_CITY);
    }
    /**
     * 清除站点城市列表
     * @return
     */
    public void removeStationNameList(){
        redisUtils.del(RedisConstants.STATION_NAME);
    }

    /**
     * 存储短信验证码（时限30s）
     * @param phoneNumber
     * @param checkCode
     */
    public void saveCheckCode(String phoneNumber,String checkCode){
        redisUtils.set(getCheckCodeKey(phoneNumber),checkCode,30);
    }

    /**
     * 获取短信验证码
     * @param phoneNumber
     * @return
     */
    public String getCheckCode(String phoneNumber){
        return (String)redisUtils.get(getCheckCodeKey(phoneNumber));
    }

    /**
     * 清除短信验证码
     * @param phoneNumber
     */
    public void removeCheckCode(String phoneNumber){
        redisUtils.del(getCheckCodeKey(phoneNumber));
    }

    public String getCheckCodeKey(String phoneNumber){
        return RedisConstants.CHECK_CODE+phoneNumber;
    }
}
